/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.designless.business.component;

import br.com.designless.business.dao.DAOLocal;
import br.com.designless.business.model.TiposUsuario;
import br.com.designless.business.model.Usuarios;
import br.com.designless.exception.UsuarioExistenteException;
import br.com.designless.exception.UsuarioNaoEncontradoException;
import java.util.HashMap;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author diogenes.feijo
 */
@Stateless(name=UsuarioComponentLocal.JNDI_NAME)
public class UsuarioComponentBean implements UsuarioComponentLocal {

    @EJB
    private DAOLocal dao;

    public Usuarios cadastrarUsuario(Usuarios usuario) throws UsuarioExistenteException {
        boolean loginOK = false;
        boolean emailOK = false;

        try {
            buscarUsuario(usuario.getLogin());
        } catch (UsuarioNaoEncontradoException ex) {
            loginOK = true;
        }

        try {
            buscarUsuarioPorEmail(usuario.getEmail());
        } catch (UsuarioNaoEncontradoException ex) {
            emailOK = true;
        }

        if (!loginOK) {
            throw new UsuarioExistenteException("Um usuário com este nome já foi cadastrado");
        }

        if (!emailOK) {
            throw new UsuarioExistenteException("Um usuário com este e-mail já foi cadastrado");
        }

        return (Usuarios) dao.salvar(usuario);
    }

    public TiposUsuario cadastrarTipoUsuario(TiposUsuario tipoUsuario) {
        return (TiposUsuario) dao.salvar(tipoUsuario);
    }

    public Usuarios buscarUsuario(String login, String senha) throws UsuarioNaoEncontradoException {
        HashMap<String, Object> parametros = new HashMap<String, Object>();

        parametros.put("login", login);
        parametros.put("senha", senha);

        List<Usuarios> listaUsuarios = dao.buscar("Usuarios.findByLoginAndSenha", parametros);

        if (listaUsuarios == null || listaUsuarios.isEmpty()) {
            throw new UsuarioNaoEncontradoException("Usuário não encontrado");
        }
        
        return listaUsuarios.get(0);
    }

    public Usuarios buscarUsuario(String login) throws UsuarioNaoEncontradoException {
        HashMap<String, Object> parametros = new HashMap<String, Object>();

        parametros.put("login", login);

        List<Usuarios> listaUsuarios = dao.buscar("Usuarios.findByLogin", parametros);

        if (listaUsuarios == null || listaUsuarios.isEmpty()) {
            throw new UsuarioNaoEncontradoException("Usuário não encontrado");
        }

        return listaUsuarios.get(0);
    }

    public Usuarios buscarUsuarioPorEmail(String email) throws UsuarioNaoEncontradoException {
        HashMap<String, Object> parametros = new HashMap<String, Object>();

        parametros.put("email", email);

        List<Usuarios> listaUsuarios = dao.buscar("Usuarios.findByEmail", parametros);

        if (listaUsuarios == null || listaUsuarios.isEmpty()) {
            throw new UsuarioNaoEncontradoException("Não existe usuário cadastrado para este e-mail");
        }

        return listaUsuarios.get(0);
    }

    public List<Usuarios> buscarUsuarios() {
        return dao.buscar("Usuarios.findAll", null);
    }
 
}